package com.pattern.singleton;

/**
 * @Description: 懒汉单例,
 * 饿汉模式，浪费了资源，每次加载的时候都先去实例
 * 懒汉模式，可能出现获取不到实例，或者多个实例的情况，即使双重加锁，也会牺牲一些性能
 * 推荐使用 {@link ClassInnerSingleton}
 * @see ClassInnerSingleton
 * @Author: whp
 * @Date: 2021-01-27 15:20
 */
public class LazySingleton {
    // volatile 保证 instangce 在左右线程一致
    // 但是volatile 直接写入共享内存，同时也丢弃写入本地线程缓存，失去了一些性能
    private static volatile LazySingleton instance=null;

    //空构造
    private LazySingleton(){}

    public static LazySingleton getInstance() {
        if(instance==null){
            synchronized (LazySingleton.class){
                instance = new LazySingleton();
            }
        }

        return instance;
    }
}
